package medium.string;

/**
 * <a href="https://leetcode-cn.com/problems/swap-for-longest-repeated-character-substring">1156. 单字符重复子串的最大长度</a>
 * 如果字符串中的所有字符都相同，那么这个字符串是单字符重复的字符串。
 * 给你一个字符串 text，你只能交换其中两个字符一次或者什么都不做，然后得到一些单字符重复的子串。返回其中最长的子串的长度。
 * 示例 1：
 *   输入：text = "ababa"
 *   输出：3
 * 示例 2：
 *   输入：text = "aaabaaa"
 *   输出：6
 * 示例 3：
 *   输入：text = "aaabbaaa"
 *   输出：4
 * 示例 4：
 *   输入：text = "aaaaa"
 *   输出：5
 * 示例 5：
 *   输入：text = "abcdef"
 *   输出：1
 * 提示：
 *   1 <= text.length <= 20000
 *   text 仅由小写英文字母组成。
 * @author 刘学松
 * @date 2021-04-19 12:14
 */
public class 单字符重复子串的最大长度 {
    public static void main(String[] args) {
        // TODO
        for (int i = 0; i < 100; i++) {
            System.out.println((int) (Math.random() * 3));
        }
    }

    public int maxRepOpt1(String text) {
        int maxLength = 0;

        int left = 0;
        int right = 1;
        boolean done = false;
        char maxChar = text.charAt(0);
        while (right < text.length()) {
            if (text.charAt(left) == text.charAt(right)) {
                right++;
            } else {
                if (right<text.length()-1 && text.charAt(left) == text.charAt(right + 1) && !done) {
                    right++;
                    done = true;
                } else {
                    if (!done) {
                        ++maxLength;
                    }
                    left = right;
                    done = false;
                }
            }
            if (right - left > maxLength) {
                maxLength = right - left;
                maxChar = text.charAt(right - 1);
            }
        }

        int count = 0;
        for (int i = 0; i < text.length(); i++) {
            if (text.charAt(i) == maxChar) {
                ++count;
            }
        }

        return maxLength > count ? maxLength-1 : maxLength;
    }
}
